package kr.co.doriclassic.chapter23;
class Counter{
	private int value;
	public synchronized void increment(){value++;}
	public synchronized void decrement(){value--;}
	public synchronized void prnCounter(){System.out.println(value);}
	
	
}

class SharedThread extends Thread{
	Counter sharedCounter;
	
	public SharedThread(Counter sharedCounter) {
		this.sharedCounter = sharedCounter;
		start();
	}
	
	@Override
	public void run() {
		int i = 0;
		while (i<20000) {
			sharedCounter.increment();//Counter의 value 값 1  증가
			sharedCounter.decrement();//Counter의 value 값 1  감소
			if(i%40 == 0)
				sharedCounter.prnCounter();
				
				try {
					sleep((int)(Math.random()*2));
				} catch (InterruptedException e) {}
			i++;
		}
	}
	
}
public class CountTest {
	public static void main(String[] args) {
		Counter c = new Counter();
		
		new SharedThread(c);
		new SharedThread(c);
		new SharedThread(c);
		new SharedThread(c);
	}
}
